2011年05月14日
川俣晶の縁側ソフトウェア技術雑記 total 6955 count

4値論理型は実在するか

Written By: 川俣 晶連絡先

 論理型は通常trueとfalseの2つの値を取ります。2値です。

 ところが、実際には3値を取る論理型というのがあります。

 true, false, null(値の不在)を示すもので、SQL等でnullを許容するboolを指定すると3値論理型になります。この値をC#で直接受け取ることができるデータ型がbool?ということになります。

 では、4値論理型はあるのでしょうか?

 実はあったのですねえ。

 考えてみれば当たり前。

 ある演算の結果がtrueとfalseのどちらかに決まるとは断言できません。不定という解も正当な回答の内です。しかし、「不定」はまだ演算が行われていない「未定」とは位置づけが違います。「未定」は、将来の演算で値が確定する可能性を含みますが、「不定」とは既に値が確定しないことが決まってしまった結果です。だから「不定」を含む論理演算と「未定」を含む論理演算は同じ結果になるとは限りません。

 だから、{ true, false, null, indef }と言う4値論理型があっても良いわけですね。

なぜindefはあり得るか §

 実は浮動小数点の計算ではNaN(Not a Number)という結果が出てくる場合があります。だから、nullを許容する実数の場合、結果は「値として表現できる全ての数+null+NaN」が結果としてあり得る数です。つまり、「値として表現できる全ての数の種類+2」があり得るバリエーションです。これをboolに適用するとtrueとfalseの2種類が「値として表現できる全ての数」なので、2+2=4となり、4値型があり得ます。